﻿// 0727train01.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <sstream>

using namespace std;

/*
给定两个字符串 s 和 t ，
编写一个函数来判断它们是不是一组变位词（字母异位词）。

注意：若 s 和 t 中每个字符出现的次数都相同且字符顺序不完全相同，
则称 s 和 t 互为变位词（字母异位词）。

输入：s = "anagram", t = "nagaram"
输出：true

 */

struct StrNode
{
	int count_str1 = 0;
	int count_str2 = 0;

	void addStr1()
	{
		count_str1 += 1;
	}

	void addStr2()
	{
		count_str2 += 1;
	}

	//const表示成员函数不会修改任何变量
	int getStr1() const
	{
		return count_str1;
	}
	//const表示成员函数不会修改任何变量
	int getStr2() const
	{
		return count_str2;
	}

	StrNode() = default; //重要！
	StrNode(int count1, int count2) :count_str1(count1), count_str2(count2) {};

};

bool solve01(string s, string t)
{
	map<char, StrNode>oh_map;
	string oh_str1 = s;
	string oh_str2 = t;

	if (oh_str1 == oh_str2)
		return false;

	for (auto&oh_char:oh_str1)
	{
		if (oh_map.count(oh_char))
		{
			//StrNode& node = oh_map[oh_char];
			//node.addStr1();
			oh_map[oh_char].addStr1();
		}
		else
		{
			StrNode node(1, 0);
			oh_map[oh_char] = node;
		}
		//------
	}

	for (auto &oh_char:oh_str2)
	{
		if (!oh_map.count(oh_char))
			return false;

		oh_map[oh_char].addStr2();
	}

	for (auto &node: oh_map)
	{
		StrNode str_node = node.second;
		if (str_node.getStr1() != str_node.getStr2())
			return false;
	}

	
	return true;
}


/*
给你两个字符串：ransomNote 和 magazine ，
判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以，返回 true ；否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。

输入：ransomNote = "a", magazine = "b"
输出：false

输入：ransomNote = "aa", magazine = "ab"
输出：false

输入：ransomNote = "aa", magazine = "ab"
输出：false
  
 */

bool solve02(string ransomNote, string magazine)
{
	map<char, int>oh_map;
	//ransomNote 能不能由 magazine 里面的字符构成
	for (auto &oh_char: magazine)
	{
		if (!oh_map.count(oh_char))
		{
			oh_map[oh_char] = 1;
		}
		else
		{
			oh_map[oh_char] += 1;
		}

	}

	for (auto &oh_char: ransomNote)
	{
		if (!oh_map[oh_char]) return false;

		if (oh_map[oh_char] == 0) return false;

		oh_map[oh_char] -= 1;

	}
	return true;
	//solve02
	//------
}


/*
 0 和 1 组成的长度为 5 的字符串代表每个人所得到的福卡
 ，每一位代表一种福卡，1 表示已经获得该福卡，
 单类型福卡不超过 1 张，随机抽取一个小于 10 人团队，求该团队最多可以集齐多少套五福

11001,11101
0

11101,10111
1
 */

void solve03(vector<vector<int>>nums_vec)
{
	map<int, int>result_map;

	for (auto &outer_vec:nums_vec)
	{
		for (int i=0; i<outer_vec.size(); i++)
		{
			int curr_num = outer_vec[i];

			if (curr_num==1)
			{
				if (result_map.count(i) == 0)
				{
					result_map[i] = 1;
				}
				else
				{
					result_map[i] += 1;
				}
				
			}

		}
	}

	if (result_map.size() != 5)
	{
		cout << 0;
		return;
	}

	int result = INT_MAX;
	for (auto &index:result_map)
	{
		int curr_count = index.second;
		//cout << curr_count;
		result = min(result, curr_count);
	}

	cout << result;

	//------solve03
}


int main()
{
	
	{
		string input;
		getline(cin, input);
		stringstream oh_sstream(input);
		string token;

		vector<string>str_vec;

		while (getline(oh_sstream, token, ','))
		{
			str_vec.push_back(token);
		}

		//------
		//str_vec
		//for (auto&oh_str:str_vec)
		//{
		//	cout << oh_str << endl;
		//}
		//str_vec
		//------

		vector<vector<int>>nums_vec;
		for (auto&oh_str:str_vec)
		{
			vector<int>inner;
			for (auto &oh_char:oh_str)
			{
				//cout << oh_char - '0';
				inner.push_back(oh_char - '0');
			}
			nums_vec.push_back(inner);
			//cout << nums_vec.size() << endl;
		}

		solve03(nums_vec);

		return 0;
	}

	{
		//11101,10111 1
		//11001,11101 0
		vector<int>inner1 = { 1,1,1,0,1 };
		vector<int>inner2 = { 1,0,1,1,1 };

		vector<vector<int>>nums_vec;
		nums_vec.push_back(inner1);
		nums_vec.push_back(inner2);

		solve03(nums_vec);

		return 0;
	}


	{
		string ransomNote = "aa", magazine = "aab";

		cout << solve02(ransomNote, magazine);
		return 0;
	}

	// s = "anagram", t = "nagaram"
	string s = "anagram";
	string t = "nagaram";

	cout << solve01(s, t);
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
